home *** CD-ROM | disk | FTP | other *** search
/ Ford Galaxy MK1 Restyling Interactive Presentation / Ford Galaxy.iso / Design.dxr / 00051_Zoom In-Out bis.ls < prev    next >
Encoding:
Text File  |  2001-02-15  |  5.5 KB  |  174 lines

  1. property pSprite, pSpriteRect, pStart, pActive, pStartRect, pDestRect, pDiffRect, pCompleteCycles, pText, pTargetRect, pZoomed, pAuto, pTargetSprite, pCycles, pPeriodBase, pPeriod
  2.  
  3. on getBehaviorDescription me
  4.   return "ZOOM IN/OUT" & RETURN & RETURN & "Gives the appearance of a sprite zooming in (getting larger) or zooming out (smaller). " & "Can be used with animated GIF, bitmap, Flash, QuickTime, text, and vector shape sprites." & RETURN & RETURN & "Place the sprite in its desired zoomed-in position, then add the behavior to the sprite. " & "Choose whether the sprite should zoom in or out, when the zooming should start, the coordinates for the zoomed-out sprite, the number of times it should zoom, and how fast it should zoom. " & "The default zoomed-out position is the center of the sprite." & RETURN & RETURN & "The zoom can be activated automatically in the first frame, by a click on the sprite, or by sending the sprite a mZoomActivate message. " & "See the Notes for Developers in the script for information on this method." & RETURN & RETURN & "PERMITTED MEMBER TYPES:" & RETURN & "animated GIF, bitmap, Flash, QuickTime, text, vector shape" & RETURN & RETURN & "PARAMETERS:" & RETURN & "* Zoom in or out?" & RETURN & "* Zoom activation (automatic, click, or message)" & RETURN & "* Horizontal and vertical zoom coordinates" & RETURN & "* Number of zoom cycles" & RETURN & "* Time period for zoom in seconds" & RETURN & RETURN & "Set the number of zoom cycles to -1 if you want an endless loop, or to 0 if the zoom should happen only once."
  5. end
  6.  
  7. on getBehaviorTooltip me
  8.   return "Zooms a sprite in and out. " & "The sprite can zoom in once, multiple times, or continuously."
  9. end
  10.  
  11. on beginSprite me
  12.   pZoomed = resolve(pZoomed)
  13.   pAuto = resolve(pAuto)
  14.   mInitialize(me)
  15. end
  16.  
  17. on resolve prop
  18.   case prop of
  19.     pZoomed:
  20.       choiceslist = ["In", "Out"]
  21.       lookup = [#in, #out]
  22.     pAuto:
  23.       choiceslist = ["Automatic", "Click", "Message"]
  24.       lookup = [#automatic, #click, #message]
  25.   end case
  26.   return lookup[findPos(choiceslist, prop)]
  27. end
  28.  
  29. on prepareFrame me
  30.   mUpdate(me)
  31. end
  32.  
  33. on mouseUp me
  34.   if pAuto = #click then
  35.     mActivate(me)
  36.   end if
  37. end
  38.  
  39. on mInitialize me
  40.   pSprite = sprite(me.spriteNum)
  41.   pSpriteRect = pSprite.rect
  42.   pActive = 0
  43.   pCompleteCycles = 0.5
  44.   pPeriod = pPeriodBase * 1000
  45.   pText = pSprite.member.type = #text
  46.   pTargetRect = sprite(pTargetSprite).rect
  47.   if pZoomed = #in then
  48.     if pText then
  49.       pSprite.quad = mRecttoQuad(pTargetRect)
  50.     else
  51.       pSprite.rect = pTargetRect
  52.     end if
  53.   end if
  54.   if pAuto = #automatic then
  55.     mActivate(me)
  56.   else
  57.     pSprite.visible = 0
  58.   end if
  59. end
  60.  
  61. on mUpdate me
  62.   if pActive then
  63.     vMillis = the milliSeconds
  64.     vElapsed = vMillis - pStart
  65.     if vElapsed >= pPeriod then
  66.       pActive = 0
  67.       if pText then
  68.         pSprite.quad = mRecttoQuad(pDestRect)
  69.       else
  70.         pSprite.rect = pDestRect
  71.       end if
  72.       mCheckCycle(me)
  73.     else
  74.       vRect = pStartRect + (pDiffRect * vElapsed / pPeriod)
  75.       if pText then
  76.         pSprite.quad = mRecttoQuad(vRect)
  77.       else
  78.         pSprite.rect = vRect
  79.       end if
  80.     end if
  81.   end if
  82. end
  83.  
  84. on mActivate me
  85.   pSprite.visible = 1
  86.   case pZoomed of
  87.     #in:
  88.       mZoomIn(me)
  89.     #out:
  90.       mZoomOut(me, sprite(pTargetSprite).rect)
  91.   end case
  92. end
  93.  
  94. on mCheckCycle me
  95.   vContinue = 0
  96.   case pCycles of
  97.     (-1):
  98.       vContinue = 1
  99.     0:
  100.       vContinue = 0
  101.     otherwise:
  102.       pCompleteCycles = pCompleteCycles + 0.5
  103.       if integer(pCompleteCycles) <= pCycles then
  104.         vContinue = 1
  105.       end if
  106.   end case
  107.   if vContinue then
  108.     if pDestRect = pSpriteRect then
  109.       mZoomOut(me, pTargetRect)
  110.     else
  111.       mZoomIn(me)
  112.     end if
  113.   else
  114.     if pZoomed = #out then
  115.       pSprite.visible = 0
  116.     end if
  117.   end if
  118. end
  119.  
  120. on mRecttoQuad vRect
  121.   return [point(vRect.left, vRect.top), point(vRect.right, vRect.top), point(vRect.right, vRect.bottom), point(vRect.left, vRect.bottom)]
  122. end
  123.  
  124. on mZoomIn me
  125.   mZoom(me, pSpriteRect)
  126. end
  127.  
  128. on mZoomOut me, vTargetRect
  129.   mZoom(me, vTargetRect)
  130. end
  131.  
  132. on mZoom me, vDestRect
  133.   pActive = 1
  134.   pStartRect = pSprite.rect
  135.   pDestRect = vDestRect
  136.   pDiffRect = pDestRect - pStartRect
  137.   pStart = the milliSeconds
  138. end
  139.  
  140. on mCenter vRect
  141.   return point(vRect.left + (vRect.width / 2), vRect.top + (vRect.height / 2))
  142. end
  143.  
  144. on mZoomActivate me, vZoomed
  145.   if pAuto = #message then
  146.     if not voidp(vZoomed) then
  147.       pZoomed = vZoomed
  148.       pZoomed = resolve(pZoomed)
  149.     end if
  150.     mActivate(me)
  151.   end if
  152. end
  153.  
  154. on isOKToAttach me, aSpriteType, aSpriteNum
  155.   case aSpriteType of
  156.     #graphic:
  157.       return getPos([#text, #bitmap, #animGif, #vectorShape, #quickTimeMedia, #flash], sprite(aSpriteNum).member.type) <> 0
  158.     #script:
  159.       return 0
  160.   end case
  161. end
  162.  
  163. on getPropertyDescriptionList me
  164.   vRect = sprite(the currentSpriteNum).rect
  165.   vCenter = mCenter(vRect)
  166.   vPDList = [:]
  167.   setaProp(vPDList, #pZoomed, [#comment: "Zoom in or out?", #format: #string, #default: "In", #range: ["In", "Out"]])
  168.   setaProp(vPDList, #pAuto, [#comment: "Start automatically, when clicked, or by message?", #default: "Automatic", #format: #string, #range: ["Automatic", "Click", "Message"]])
  169.   setaProp(vPDList, #pTargetSprite, [#comment: "Number of target sprite", #format: #integer, #range: [#min: 1, #max: the lastChannel], #default: max(the currentSpriteNum - 1, 1)])
  170.   setaProp(vPDList, #pCycles, [#comment: "Zoom cycles (0 = one zoom only, -1 = repeat forever)", #format: #integer, #default: 0, #range: [#min: -1, #max: 10]])
  171.   setaProp(vPDList, #pPeriodBase, [#comment: "Time period for zoom (seconds)", #format: #float, #default: 2.0, #range: [#min: 0.25, #max: 15.0]])
  172.   return vPDList
  173. end
  174.